#include <cstdio>
#include <cstring>
#include <map>
#include <queue>
#include <iostream>
using namespace std;



typedef struct ppp{
	int a, b;
}par;

par p[200001];
bool ok, mark[200001];
map< int, int > m;
queue<int> q;
int n, c, x, y, a, b, i, j, k, t, s;
int main(){
	freopen("in.txt", "r", stdin);
	scanf("%d%d", &n, &c);
	while(n+c){
		m.clear();
		memset(p, 0, sizeof(p));
		ok=1;
		t=1;
		for(i=0;i<c;++i){
			scanf("%d%d", &a, &b);
			
			if(ok){
				j=m[a];
				k=m[b];
				if(!j){
					j=m[a]=t++;
					printf("%d: %d\n", a, j);
				}
				if(!k){
					k=m[b]=t++;
					printf("%d: %d\n", b, k);
				}
				
				if(p[j].a){
					if(p[j].b && !(p[j].a == k || p[j].b ==k))
						ok=0;
					else if(p[j].a!=k)p[j].b=k;
				}
				else p[j].a=k;
				//printf("%d: %d %d++%d\n", a, p[j].a, p[j].b, j);

				if(p[k].a){
					if(p[k].b && !(p[k].a == j || p[k].b ==j))
						ok=0;
					else if(p[k].a!=j)p[k].b=j;
				}
				else p[k].a=j;
				//printf("%d: %d %d++%d\n", b, p[j].a, p[j].b, j);


			}
		}
		if(ok){
			memset(mark, 1, sizeof(int)*t);
			s=0;
			
				printf("\n");
				for(i=1;i<t;++i){
					printf("%d - %d %d\n", i, p[i].a, p[i].b);
				}
				printf("\n");
			for(i=1;i<t&&ok;++i){
				if(!p[i].b){
					q.push(i);
					printf("+%d\n", i);
					mark[i]=0;
					s++;
					while(!q.empty()&&ok){
						j=q.front();q.pop();
						printf("-%d %d %d\n", j, p[j].a, p[j].b);
						if(mark[p[j].a] && p[j].a){
							mark[p[j].a]=0;
							s++;
							printf("+%d\n", p[j].a);
							q.push(p[j].a);
						}
						else if(mark[p[j].b]&& p[j].b ){
							mark[p[j].b]=0;
							s++;
							printf("+%d\n", p[j].b);
							q.push(p[j].b);
						}else if(!mark[p[j].a]&&!mark[p[j].b])ok=0;
					}
				}
			}
			if(ok)printf("..Y\n");
			else printf("..N\n");
		}
		else{
			printf("N\n");
		}
		
		
		
		scanf("%d%d", &n, &c);
	}
	
	return 0;
}
